package com.czy.server;

import com.czy.utils.IoCloseUtil;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 服务器，用于启动和停止服务
 * https://zhuanlan.zhihu.com/p/64981000
 * https://zhuanlan.zhihu.com/p/65111532
 * https://zhuanlan.zhihu.com/p/65240984
 * @author czy
 * @date 2021-5-26 17:39
 */
public class Server {
    private ServerSocket server;
    /**默认没有出错*/
    private boolean isShutDown=false;
    public static void main(String[] args) {
        //创建服务器对象
        Server server=new Server();
        server.start();
    }
    public void start(){
        this.start(8888);
    }
    public void start(int port){
        try {
            server=new ServerSocket(port);
            this.receive(); //调用接收请求信息的方法
        } catch (IOException e) {
            isShutDown=true;
        }
    }
    private void receive() {
        try {
            while(!isShutDown){
                //(1)监听
                Socket client=server.accept();
                //创建线程类的对象
                Dispatcher dis=new Dispatcher(client);
                //创建线程的代理类，并启动线程
                new Thread(dis).start();
            }

        } catch (IOException e) {
            this.stop();//关闭服务器
        }

    }
    public void stop(){
        isShutDown=true;
        IoCloseUtil.closeAll(server);
    }
}
